package com.briup.web.controller;

import com.alibaba.excel.EasyExcel;
import com.briup.bean.Category;
import com.briup.bean.Ext.CategoryExt;
import com.briup.service.ICategoryService;
import com.briup.util.Result;
import com.briup.util.ResultUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author syh
 * @since 2024-09-10
 */
@Api(tags="栏目管理")
@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private ICategoryService service;
    @ApiOperation("导出栏目数据")
    @GetMapping("/export")
    public Result export(HttpServletResponse response) throws IOException {
        //设置响应头：
        // 这里注意 有同学反应使用swagger 会导致各种问题，请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");//响应体数据格式
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("栏目信息", "UTF-8").replaceAll("\\+", "%20");
        //响应体的内容默认是内联方式（浏览器视口区）attachment 以附件的方式进行下载，下载文件名就是 测试.xlsx
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        //将生成excel字节信息写出响应报文响应体
        OutputStream out = response.getOutputStream();
        //将service层返回值写入输出流
        EasyExcel.write(out, CategoryExt.class).sheet().doWrite(service.data());
        return ResultUtil.success();
    }

    @ApiOperation("导入栏目数据")
    @PostMapping("/import")
    public Result importCategory(@RequestPart MultipartFile file){
        List<Category> list = service.importCategory(file);
        return ResultUtil.success(list);
    }
}
